#include <QApplication>
#include <QDebug>
#include <QSurfaceFormat>
#include "MainWindow.h"

/**
 * @brief 配置全局OpenGL格式
 *
 * 在创建任何OpenGL窗口之前设置默认格式，
 * 确保所有QOpenGLWidget使用相同的上下文配置。
 */
void configureOpenGL() {
    QSurfaceFormat format;
    format.setVersion(3, 3);                      // OpenGL 3.3
    format.setProfile(QSurfaceFormat::CoreProfile);
    format.setDepthBufferSize(24);
    format.setStencilBufferSize(8);
    format.setSamples(4);                         // MSAA 4x
    format.setSwapBehavior(QSurfaceFormat::DoubleBuffer);
    format.setSwapInterval(1);                    // 启用垂直同步

    QSurfaceFormat::setDefaultFormat(format);

    qDebug() << "[main] OpenGL format configured:"
             << format.majorVersion() << "." << format.minorVersion();
}

/**
 * @brief 配置Qt应用属性
 */
void configureApplication() {
    // 高DPI支持（适配Deepin高分屏）
    QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
    QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);

    // 设置应用信息
    QApplication::setOrganizationName("SolitaireDemo");
    QApplication::setOrganizationDomain("example.com");
    QApplication::setApplicationName("Solitaire");
    QApplication::setApplicationVersion("1.0.0");

    qDebug() << "[main] Application configured";
}

int main(int argc, char* argv[]) {
    // 配置应用属性（必须在创建QApplication之前）
    configureApplication();

    // 创建Qt应用
    QApplication app(argc, argv);

    qDebug() << "========================================";
    qDebug() << "Solitaire - Qt + cocos2d-x Integration";
    qDebug() << "Version: 1.0.0";
    qDebug() << "Qt Version:" << QT_VERSION_STR;
    qDebug() << "Platform:" <<
#if defined(__linux__)
        "Linux (Deepin)";
#elif defined(__APPLE__)
        "macOS";
#else
        "Unknown";
#endif
    qDebug() << "========================================";

    // 配置OpenGL
    configureOpenGL();

    // 创建并显示主窗口
    qDebug() << "[main] Creating main window...";
    MainWindow window;
    qDebug() << "[main] Showing window...";
    window.show();

    qDebug() << "[main] Main window shown, entering event loop";

    // 进入Qt事件循环
    int result = app.exec();

    qDebug() << "[main] Application exiting with code:" << result;

    return result;
}
